/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.agi.ia.kohonen;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;

/**
 *
 * @author renatogrosz
 */
public class LeitorData implements  Iterable<Dados> , Iterator<Dados>{
    
    int id;
    private String[] filenames;
    
    private Dados dados;
    
    public LeitorData(){        
    }

    public void setFileNames(String[] filenames){
        this.filenames=filenames;
        id=0;
        this.findNext();
    }
    
    @Override
    public boolean hasNext() {
        return(dados != null);
    }

    @Override
    public Dados next() {        
        Dados retorno;
        retorno=dados;
        this.findNext();
        return retorno;        
    }

    
    protected void findNext(){
        String filename;
        File f;
        BufferedImage buf;                
        try {        
            filename=filenames[id];
            f=new File(filename);        
            buf=ImageIO.read(f);
            dados=lerDados(buf);
        } catch (IOException ex) {
            dados=null;            
        } catch(Exception e){
            dados=null;
        }        
        id+=1;       
    }
    
    @Override
    public void remove() {
        
    }

    protected Dados lerDados(BufferedImage buf){
        DadosVO retorno;
        Tamanho tamanho;
        double[][] doubledados;
        retorno=new DadosVO();
        tamanho=new Tamanho(buf.getWidth(),buf.getHeight());
        doubledados=new double[tamanho.x][tamanho.y];
        
        retorno.setDados(doubledados);
        retorno.setTamanho(tamanho);
        
        int i;
        int j;
        
        int cor;        
        
        int r,g,b;
        double dotColor;
        for(i=0;i<tamanho.x;i++){            
            for(j=0;j<tamanho.y;j++){                
                Color c;
                c=new Color(i);

                cor=buf.getRGB(i, j);                
                c=new Color(cor);

                r=c.getRed();
                g=c.getGreen();
                b=c.getBlue();
                
                dotColor=(r+g+b) / 3;
                doubledados[i][j]=dotColor;
            }
        }       
        return retorno;
    }

    @Override
    public Iterator<Dados> iterator() {
        return(this);
    }
    
    
}
